package com.mark.web.sys.service;

import com.github.pagehelper.PageInfo;
import com.mark.common.ServerResponse;

import com.mark.web.sys.entity.po.User;
import com.mark.web.sys.entity.vo.UserVo;

import java.util.Map;

/**
 * @Description:
 * @Author: Kingsley
 * @CreateDate: 2019/1/1 15:27
 * @Version: 2.0
 * @Copyright : 豆浆油条个人非正式工作室
 */
public interface IUserService {

    ServerResponse<Map<String, Object>>  registerSimple(User user);

    ServerResponse<String> checkValid(String username, String type);

    ServerResponse<User>  login(String type, String typeValue, String pwd);

    ServerResponse<Map<String, Object>>  register(User user);

    ServerResponse<UserVo> getCurrentUser(int currentUserId);

    /**
     *6.忘记密码  step1 根据用户名获取问题
     *
     * @param username ：用户名
     * @return ： 问题
     */
    ServerResponse<String> selectQuestion(String username);

    /**
     * 7.忘记密码 step2 回答问题
     *
     * @param username ： 用户名
     * @param question ： 问题
     * @param answer ： 答案
     * @return ：查询结果，回答问题正确，返回token；回答错误返回提示信息
     */
    ServerResponse<String> checkAnswer(String username, String question, String answer);

    /**
     * 8.忘记密码 step3 重置密码
     *
     * @param username ：用户名
     * @param passwordNew ： 新密码
     * @param forgetToken ： token
     * @return ：重置密码结果
     */
    ServerResponse<String> forgetResetPassword(String username, String passwordNew, String forgetToken);

    /**
     * 9.更新密码
     *
     * @param passwordOld： 旧密码
     * @param passwordNew：新密码
     * @param user：当前的用户（存储在redis中）
     * @return ：更新密码的结果
     */
    ServerResponse<String> resetPassword(String passwordOld, String passwordNew, int currentUserId);

    /**
     * 10.更新用户信息
     *
     * @param user：用户对象
     * @return ：更新成功返回更新后的用户信息
     */
    ServerResponse<UserVo> updateInformation(User user);

    /**
     * 5.获取当前的用户信息
     *
     * @param currentUserId：存储在redis当前的用户的id
     * @return ：根据id查询在数据库中的用户信息
     */
    ServerResponse<UserVo> getInfo(Integer currentUserId);

    /**
     * 11.更新用户头像
     *
     * @param currentUserId：当前的用户id
     * @param imageUrl：头像的地址
     * @return ： 更新的结果
     */
    ServerResponse updateImageUrl(int currentUserId, String imageUrl);

    /***********************************后台接口**********************************************/
    PageInfo<UserVo> getUserList(int pageNum, int pageSize);

    ServerResponse setUserEnableStatus(Integer userId, Integer newStatus, String remark);

    ServerResponse searchUsers(int pageNum, int pageSize, String userName, Integer userId, Integer status);
}
